package com.itao.xbatis.page;

import cn.xbatis.page.IPager;
import cn.xbatis.page.PagerField;
import lombok.Data;

import java.util.Collections;
import java.util.List;

/**
 * @author sjt
 * @Date 2025/3/25 13:37
 */
@Data
public class Page <T> implements IPager<T> {

    private Boolean executeCount = true;

    /**
     * 查询数据列表
     */
    protected List<T> records = Collections.emptyList();

    /**
     * 总数
     */
    protected Integer total = 0;
    /**
     * 每页显示条数，默认 10
     */
    protected Integer size = 10;

    /**
     * 当前页
     */
    protected Integer current = 1;

    public Page(Integer current, Integer size) {
        this.current = current;
        this.size = size;
    }

    @Override
    public <V> void set(PagerField<V> field, V value) {
        if (PagerField.TOTAL == field) {
            //设置总条数
            this.setTotal((Integer) value);
            return;
        }
        if (PagerField.RESULTS == field) {
            //设置List结果
            this.setRecords((List) value);
            return;
        }
        throw new RuntimeException("not support field: " + field);
    }

    @Override
    public <V> V get(PagerField<V> field) {
        if (PagerField.IS_EXECUTE_COUNT == field) {
            //返回是否执行count查询 ,isExecuteCount改成你自己的方法或字段
            return (V) this.getExecuteCount();
        }
        if (PagerField.NUMBER == field) {
            //返回页码 ,getNumber改成你自己的方法或字段
            return (V) this.getCurrent();
        }
        if (PagerField.SIZE == field) {
            //返回每页条数 ,getSize改成你自己的方法或字段
            return (V) this.getSize();
        }
        throw new RuntimeException("not support field: " + field);
    }
}
